
import java.awt.*;
import static rodzajpola.RodzajPola.*;
import static kierunek.Kierunek.*;
import kierunek.*;

public class Istota {
	
	double x,y,dx,dy;
	int zycia;
	Image pngWizerunek;
	OknoPlanszy mojeOkno;
	Kierunek skret = ZERO;
	double predkosc;
	
	public Istota(OknoPlanszy mO, Image wiz){
		zycia=3;
		pngWizerunek=wiz;
		predkosc = 0.01; //TODO	
		mojeOkno = mO;
		x=1;
		y=1;
			
	}
	
	Kierunek gdzieIde(){
		if(dx>0){
			return PRAWO;
		}
		else if(dx<0){
			return LEWO;
		}
		else if(dy>0){
			return GORA;
		}
		else if(dy<0){
			return DOL;
		}
		else{
			return ZERO;
		}
	}
	boolean czyMogePrzedSiebie(){
		boolean zw=false;
		switch(gdzieIde()){
		case PRAWO:
			zw = mojeOkno.obecnyPoziom.jakiePole((int)Math.round(y),(int)Math.ceil(x))==MUR ? false : true;
			break;
		case LEWO:
			zw = mojeOkno.obecnyPoziom.jakiePole((int)Math.round(y),(int)Math.floor(x))==MUR ? false : true;
			break;
		case GORA:
			zw = mojeOkno.obecnyPoziom.jakiePole((int)Math.ceil(y),(int)Math.round(x))==MUR ? false : true;
			break;
		case DOL:
			zw = mojeOkno.obecnyPoziom.jakiePole((int)Math.floor(y),(int)Math.round(x))==MUR ? false : true;
			break;
		default:
			zw=false;
		}
		return zw;
	}
		
	public void przesun(float dt){
		if(czyMogePrzedSiebie()){
			if (dx==0){
				x+=dx*dt;
				x=Math.round(x);
				y+=dy*dt;
			}
			if (dy==0){
				x+=dx*dt;
				y+=dy*dt;
				y=Math.round(y);
			}
		}
		
	}
	public void animuj(long czasPoprzedni){
		long dt = System.currentTimeMillis() - czasPoprzedni;
		if(czyMogeWBok(skret)){
			switch (skret){
				case LEWO :
					dx=-predkosc;
					dy=0;
					break;
				case PRAWO :
					dx=predkosc;
					dy=0;
					break;
				case GORA :
					dx=0;
					dy=-predkosc;
					break;
				case DOL :
					dx=0;
					dy=predkosc;
					break;
				default:
					dx=0;
					dy=0;
			}
		}
		przesun(dt);
			
	}
	
	boolean czyMogeWBok(Kierunek bok){
		boolean zw=false;
		if(dx!=0 && bok==GORA) {
			zw = mojeOkno.obecnyPoziom.jakiePole((int)Math.floor(y)-1,(int)Math.round(x))==MUR ? false : true;
		}
		else if(dx!=0 && bok==DOL) {
			zw = mojeOkno.obecnyPoziom.jakiePole((int)Math.floor(y)+1,(int)Math.round(x))==MUR ? false : true;
		}
		else if(dy!=0 && bok==PRAWO) {
			zw = mojeOkno.obecnyPoziom.jakiePole((int)Math.round(y),(int)Math.floor(x)+1)==MUR ? false : true;
		}
		else if(dy!=0 && bok==LEWO) {
			zw = mojeOkno.obecnyPoziom.jakiePole((int)Math.round(y),(int)Math.floor(x)-1)==MUR ? false : true;
		}
		else{
			zw=true;
		}
		return zw;
	}
	
	
	
}


/*
ustawPozycje(float x, float y){
	this.x=x;
	this.y=y;
}
ustawPredkosc(float dx, float dy){
	this.dx=dx;
	this.dy=dy;
}

public void run(){
	//Zaladuj obrazki itd
	petlaAnimacji();
}
public void rysuj(Graphics g){
	g.drawImage(pngWizerunek,(int)x,(int)y,this);
}
*/